{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import itertools\n",
    "import sklearn\n",
    "import matplotlib\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.datasets import make_classification\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "from xgboost import XGBClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('0.20.3', '2.1.0', '1.16.2')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sklearn.__version__, matplotlib.__version__, np.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# using random data for this exaple\n",
    "X, y = make_classification(\n",
    "    n_samples=10000, \n",
    "    n_features=25,\n",
    "    n_informative=10,\n",
    "    n_redundant=0,\n",
    "    n_classes=5)\n",
    "\n",
    "class_names = ['class-1','class-2','class-3','class-4','class-5']\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)\n",
    "\n",
    "clf = XGBClassifier()\n",
    "clf.fit(X_train,y_train)\n",
    "\n",
    "y_pred = clf.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa60c1978d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "matrix = confusion_matrix(y_test,y_pred)\n",
    "   \n",
    "plt.clf()\n",
    "\n",
    "# place labels at the top\n",
    "plt.gca().xaxis.tick_top()\n",
    "plt.gca().xaxis.set_label_position('top')\n",
    "\n",
    "# plot the matrix per se\n",
    "plt.imshow(matrix, interpolation='nearest', cmap=plt.cm.Blues)\n",
    "\n",
    "# plot colorbar to the right\n",
    "plt.colorbar()\n",
    "    \n",
    "fmt = 'd'\n",
    "\n",
    "# write the number of predictions in each bucket\n",
    "thresh = matrix.max() / 2.\n",
    "for i, j in itertools.product(range(matrix.shape[0]), range(matrix.shape[1])):\n",
    "\n",
    "    # if background is dark, use a white number, and vice-versa\n",
    "    plt.text(j, i, format(matrix[i, j], fmt),\n",
    "         horizontalalignment=\"center\",\n",
    "         color=\"white\" if matrix[i, j] > thresh else \"black\")\n",
    "    \n",
    "tick_marks = np.arange(len(class_names))\n",
    "plt.xticks(tick_marks, class_names, rotation=45)\n",
    "plt.yticks(tick_marks, class_names)\n",
    "plt.tight_layout()\n",
    "plt.ylabel('True label',size=14)\n",
    "plt.xlabel('Predicted label',size=14)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Global TF Kernel (Python 3)",
   "language": "python",
   "name": "global-tf-python-3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
